#设置编译器的警告级别
#-Wall 和 -Wextra 都被包含在 CFLAGS 变量中，这将会把这两个警告标志传递给 GCC 编译器
CFLAGS := -Wall -Wextra	
INC_DIRS += /home/hui/桌面/GATEWAY	# +=用于扩展变量的值

#find 命令来查找 app 目录下所有的 .c 文件
#并将这些文件的路径添加到 SRCS 变量中
SRCS += $(shell find app -name '*.c')
SRCS += $(shell find daemon -name '*.c')
SRCS += $(shell find ota -name '*.c')
SRCS += $(shell find thirdparty -name '*.c')

# 生成目标文件（.o 文件）
# := 是 Makefile 中的赋值运算符，它会立即计算表达式的值，并将结果赋给变量
# 对 SRCS 变量中的每个 .c 文件名进行模式替换
# :.c=.o 表示把每个文件名中的 .c 后缀替换成 .o
OBJS := $(SRCS:.c=.o)

# 添加包含目录到 C 编译器的编译标志中的
# addprefix 是 Makefile 内置函数之一，它会在每个列表项前加上一个前缀。
# 在这个例子中，-I 是 GCC 编译器用来指定头文件搜索路径的标志。
# $(INC_DIRS) 应该是包含头文件目录的列表
CFLAGS += $(addprefix -I, $(INC_DIRS))

#定义变量
TARGET := gateway

# 声明伪目标
.PHONY: all clean

#  $^ 相当于当前target所有依赖文件列表
#  $@ 相当于当前target目标文件的名称
#  ./$@ 的作用是执行目标文件
$(TARGET): $(OBJS)
	$(CC) $^ -o $@


# 构建并运行一个测试程序,test/test_buffer.o 是测试程序的 .o 文件
# $^ 是所有依赖文件的列表，即 $(OBJS) 和 test/test_buffer.o。
# -o $@ 指定输出文件的名字，这里是 test_buffer。
test_buffer: $(OBJS) test/test_buffer.o
	-@$(CC) $(CFLAGS) $^ -o $@
	-@./$@
	-@$(RM) $^ $@

clean:
	@$(RM) $(OBJS) $(TARGET)
